home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / crt / ds3100.md / setjmp.s < prev   
Text File  |  1990-06-27  |  4KB  |  164 lines

  1. /*
  2.  * setjmp.s --
  3.  *
  4.  *      Source code for the setjmp and longjmp library calls.
  5.  *
  6.  * Copyright (C) 1989 by Digital Equipment Corporation, Maynard MA
  7.  *
  8.  *                      All Rights Reserved
  9.  *
  10.  * Permission to use, copy, modify, and distribute this software and its 
  11.  * documentation for any purpose and without fee is hereby granted, 
  12.  * provided that the above copyright notice appear in all copies and that
  13.  * both that copyright notice and this permission notice appear in 
  14.  * supporting documentation, and that the name of Digital not be
  15.  * used in advertising or publicity pertaining to distribution of the
  16.  * software without specific, written prior permission.  
  17.  *
  18.  * Digitial disclaims all warranties with regard to this software, including
  19.  * all implied warranties of merchantability and fitness.  In no event shall
  20.  * Digital be liable for any special, indirect or consequential damages or
  21.  * any damages whatsoever resulting from loss of use, data or profits,
  22.  * whether in an action of contract, negligence or other tortious action,
  23.  * arising out of or in connection with the use or performance of this
  24.  * software.
  25.  *
  26.  * Header: Sync_GetLock.s,v 1.1 88/06/19 14:34:17 ouster Exp $ SPRITE (DECWRL)
  27.  */
  28.  
  29. #ifdef KERNEL
  30. #include <regdef.h>
  31. #else
  32. #include <regdef.h>
  33. #endif
  34.  
  35. /*
  36.  * ----------------------------------------------------------------------------
  37.  *
  38.  * setjmp --
  39.  *
  40.  *      Perform a setjmp operation.
  41.  *
  42.  * Results:
  43.  *      Always returns 0.
  44.  *
  45.  * Side effects:
  46.  *      The state of the world is stored away.
  47.  *
  48.  * C equivalent:
  49.  *
  50.  *      int setjmp(env)
  51.  *    jmp_buf    env;
  52.  *
  53.  *----------------------------------------------------------------------
  54.  */
  55.     .globl setjmp
  56.     .globl _setjmp
  57. setjmp:
  58.     subu    sp, sp, 32
  59.     sw        ra, 28(sp)
  60.     sw        a0, 24(sp)
  61.     add        a0, zero, zero        # Get current signal mask.
  62.     jal        sigblock
  63.     lw        a0, 24(sp)
  64.     lw        ra, 28(sp)
  65.     addu    sp, sp, 32
  66. _setjmp:
  67.     sw        zero, 0(a0)        # On sig stack flag = 0
  68.     sw        v0, 4(a0)        # Current signal mask.
  69.     sw        ra, 8(a0)        # Return address.
  70.     sw        gp, 124(a0)
  71.     sw        sp,128(a0)
  72.     sw        s0,76(a0)
  73.     sw        s1,80(a0)
  74.     sw        s2,84(a0)
  75.     sw        s3,88(a0)
  76.     sw        s4,92(a0)
  77.     sw        s5,96(a0)
  78.     sw        s6,100(a0)
  79.     sw        s7,104(a0)
  80.     sw        s8,132(a0)
  81.     swc1       $f20,232(a0)
  82.     swc1       $f21,236(a0)
  83.     swc1       $f22,240(a0)
  84.     swc1       $f23,244(a0)
  85.     swc1       $f24,248(a0)
  86.     swc1       $f25,252(a0)
  87.     swc1       $f26,256(a0)
  88.     swc1       $f27,260(a0)
  89.     swc1       $f28,264(a0)
  90.     swc1       $f29,268(a0)
  91.     swc1       $f30,272(a0)
  92.     swc1       $f31,276(a0)
  93.     cfc1    v0, $31
  94.     sw        v0, 280(a0)
  95.     add        v0, zero, zero
  96.     j        ra
  97.  
  98. /*
  99.  * ----------------------------------------------------------------------------
  100.  *
  101.  * longjmp --
  102.  *
  103.  *      Perform a longjmp operation.
  104.  *
  105.  * Results:
  106.  *      Returns val.
  107.  *
  108.  * Side effects:
  109.  *      State of the world is restored.
  110.  *
  111.  * C equivalent:
  112.  *
  113.  *      int longjmp(env, val)
  114.  *    jmp_buf    env;
  115.  *    int val;
  116.  *
  117.  *----------------------------------------------------------------------
  118.  */
  119.     .globl longjmp
  120.     .globl _longjmp
  121. longjmp:
  122.     subu    sp, sp, 32
  123.     sw        a0, 24(sp)
  124.     sw        a1, 28(sp)
  125.  
  126.     lw        a0, 4(a0)
  127.     jal        sigsetmask
  128.  
  129.     lw        a0, 24(sp)
  130.     lw        a1, 28(sp)
  131. _longjmp:
  132.     lw        ra, 8(a0)
  133.     lw        gp, 124(a0)
  134.     lw        sp,128(a0)
  135.     lw        s0,76(a0)
  136.     lw        s1,80(a0)
  137.     lw        s2,84(a0)
  138.     lw        s3,88(a0)
  139.     lw        s4,92(a0)
  140.     lw        s5,96(a0)
  141.     lw        s6,100(a0)
  142.     lw        s7,104(a0)
  143.     lw        s8,132(a0)
  144.     lwc1       $f20,232(a0)
  145.     lwc1       $f21,236(a0)
  146.     lwc1       $f22,240(a0)
  147.     lwc1       $f23,244(a0)
  148.     lwc1       $f24,248(a0)
  149.     lwc1       $f25,252(a0)
  150.     lwc1       $f26,256(a0)
  151.     lwc1       $f27,260(a0)
  152.     lwc1       $f28,264(a0)
  153.     lwc1       $f29,268(a0)
  154.     lwc1       $f30,272(a0)
  155.     lwc1       $f31,276(a0)
  156.     lw        v0, 280(a0)
  157.     ctc1    v0, $31
  158.  
  159.     add        v0, a1, zero
  160.     bne        v0, zero, 1f
  161.     li        v0, 1
  162. 1:  j        ra
  163.  
  164.